#ifndef GEOMETRIC_FACE
#define GEOMETRIC_FACE

#include "Geometric/Vertex.hpp"
#include <iostream>

namespace mif
{
	
	struct Triangle
	{
		Vertex * a;
		Vertex * b;
		Vertex * c;
	};
	
	struct Neighborhood
	{
		Face * A;
		Face * B;
		Face * C;
	};
	
	struct RGBA
	{
		int r;
		int g;
		int b;
		int a;
	};
	
	class Face
	{
	
		public:
			
			Face();
			
			Face(Vertex *, Vertex *, Vertex *);
			
			~Face();
			
			bool isVertex(Vertex *) const;

			const int GetID() const;
			
			const Triangle GetTriangle() const;
			
			Neighborhood GetNeighborhood() const;

			Face* GetNeighborhoodWithVertices(Vertex *,Vertex *) const;

			Vertex* getNextVertex(Vertex* v) const;
			
			RGBA GetColor() const;
			
			void SetNeighborhood(Face *, int);
			
			void SetColor(RGBA);
			
		public:
		
			static int mFaceCount;
				
		private:
		
			int mID;
			Triangle mTriangle;
			Neighborhood mNeighborhood;
			RGBA mColor;
			
	};
	
}

#endif
